/*Go语言的类型系统提供了单方向的 channel 类型，顾名思义，单向 channel 就是只能用于写入或者只能用于读取数据。
当然 channel 本身必然是同时支持读写的，否则根本没法用。
我们在将一个 channel 变量传递到一个函数时，可以通过将其指定为单向 channel 变量，从而限制该函数中可以对此 channel 的操作，
比如只能往这个 channel 中写入数据，或者只能从这个 channel 读取数据。
单向 channel 变量的声明非常简单，只能写入数据的通道类型为chan<-，只能读取数据的通道类型为<-chan，格式如下：
var 通道实例 chan<- 元素类型    // 只能写入数据的通道
var 通道实例 <-chan 元素类型    // 只能读取数据的通道
*/

package main

import (
	"fmt"
	"sync"
	"time"
)

func produtcer(ch chan<- int) {
	for i := 1; i < 11; i++ {
		ch <- i
		fmt.Println("插入值", i)
	}
	weg.Done()
}

func consumter(ch <-chan int) {

	for i := 1; i < 11; i++ {
		time.Sleep(time.Second)
		fmt.Println("取出值", <-ch)
	}

	weg.Done()
}

var weg sync.WaitGroup

func main() {
	ch := make(chan int)

	weg.Add(2)
	go produtcer(ch)
	go consumter(ch)

	weg.Wait()
	fmt.Println("end")
}
